home *** CD-ROM | disk | FTP | other *** search
/ 5 Star Games: DOS Edition 2 / 5 Star Games - DOS Edition (1995)(Ready to Run).iso / dbc / db_tree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-18  |  5.0 KB  |  175 lines

  1. /****************************************************************************/
  2. /*                 HEADER FILE FOR DATABOSS MODULE: DB_TREE                 */
  3. /****************************************************************************/
  4.  
  5. /*******************************  CONSTANTS  ********************************/
  6.  
  7. #ifndef __TURBOC__
  8.     #define _close(h) close(h)
  9.     #define _open(p,m) open(p,m)
  10.     #define _creat(p,m) creat(p,m)
  11. #endif
  12.  
  13. #define DB_fhs    20
  14. #define DB_Klen   41
  15. #define DB_ps     36
  16. #define DB_ord    18
  17.  
  18.  
  19. #ifdef DEBUG
  20.     #define DB_pstack 4
  21.     #define DB_mht    16
  22.     #define DB_mxdrs  1024
  23. #else
  24.     #define DB_pstack 32
  25.     #define DB_mht    16
  26.     #define DB_mxdrs  4096
  27. #endif
  28. #define DB_mdrs   DB_fhs
  29. #define Lock      0
  30. #define UnLock    1
  31. #define RecLocked 100
  32. #define IsLocked  -100
  33. #define ErrFileNm "DBIOERR.OR"
  34.  
  35. #define ItemOverhead    9
  36. #define PageOverhead    5
  37. #define NoDuplicates    0
  38. #define Duplicates      1
  39. #define RecTooLarge     1000
  40. #define RecTooSmall     1001
  41. #define KeyTooLarge     1002
  42. #define RecSizeMismatch 1003
  43. #define KeySizeMismatch 1004
  44. #define MemOverflow     1005
  45.  
  46. /*********************************  TYPES  **********************************/
  47.  
  48. typedef uchar fileasciiz[64];
  49. typedef uchar filename[67];
  50. typedef struct {
  51. /*    internal file record for use with lo-level file routines and keeping
  52.         sufficient data for db_tree internal routines to access */
  53.     int      handle;
  54.     word     recsize;
  55.     filename name;
  56. } filerec;
  57. typedef struct {
  58.     filerec  f;
  59.     long     firstfree;
  60.     long     numberfree;
  61.     long     int1;
  62.     long     int2;
  63.     long     itemsize;
  64.     long     numrec;
  65. } datafile;
  66. typedef datafile *datafileptr;
  67. typedef uchar keystr[DB_Klen+1];
  68. typedef uchar btkeystr[DB_Klen+1];
  69. typedef struct {
  70.     long     dataref;
  71.     long     pageref;
  72.     btkeystr key;
  73. } btitem;
  74. typedef btitem *btitemptr;
  75. typedef struct {
  76.     byte   itemsonpage;
  77.     long   bckwpageref;
  78.     btitem itemarray[DB_ps];
  79. } btpage;
  80. typedef btpage *btpageptr;
  81. typedef struct {
  82.     long pageref;
  83.     long itemarrindex;
  84. } btsearchstep;
  85. typedef btsearchstep btpath[DB_mht];
  86. typedef btsearchstep *btsearchstepptr;
  87. typedef struct {
  88.     datafile dataf;
  89.     bool     allowduplkeys;
  90.     byte     keyl;
  91.     long     rr;
  92.     long     pp;
  93.     btpath   path;
  94. } indexfile;
  95. typedef indexfile *indexfileptr;
  96. typedef struct {
  97.     btpage       page;
  98.     indexfileptr indexfptr;
  99.     long         pageref;
  100.     bool         updated;
  101. } btstackrec;
  102. typedef btstackrec *btstackrecptr;
  103. typedef btstackrec btpagestack[DB_pstack];
  104. typedef btpagestack *btpagestackptr;
  105. typedef word btpagemap[DB_pstack];
  106. typedef btpagemap *btpagemapptr;
  107. typedef union {
  108.     btstackrec page;
  109.     byte       r[DB_mxdrs];
  110.     long       i;
  111. } btrecordbuffer;
  112. typedef btrecordbuffer *btrecordbufptr;
  113. typedef void (*backdoor)(void);
  114. typedef uchar errorstring[81];
  115.  
  116. /*************************  INITIALIZED VARIABLES  **************************/
  117.  
  118. extern bool ignoresizediff;  /* = False */
  119. extern bool multiuser;       /* = False */
  120. extern bool flush_df;        /* = False */
  121. extern bool flush_if;        /* = False */
  122.  
  123. /********************************  VARIABLES  *******************************/
  124.  
  125. extern byte errstatus;
  126. extern word btstatus;
  127. extern bool ok;
  128. extern bool lockget;
  129. extern btrecordbufptr btrecbuf;
  130. extern btpagestackptr btpagestk;
  131. extern btpagemapptr btpgmap;
  132. extern backdoor shutdown;
  133. extern bool recursive;
  134. extern int retries;
  135. extern int idx_retries;
  136. extern int _loop_count;
  137. extern word _vidseg;
  138. extern int  desiredhandle;
  139.  
  140. /*******************************  PROTOTYPES  *******************************/
  141.  
  142. strptr ioerrstr(strptr sout, int n);
  143. void addkey(indexfile *idxf, long *datarecnum, void *prockey);
  144. void addrec(datafile *datf, long *r, void *buffer);
  145. void clearkey(indexfile *idxf);
  146. void closefile(datafile *datf);
  147. void closeindex(indexfile *idxf);
  148. void deletekey(indexfile *idxf, long *datarecnum, void *prockey);
  149. void deleterec(datafile *datf, long r);
  150. void erasefile(datafile *datf);
  151. void eraseindex(indexfile *idxf);
  152. void flushfile(datafile *datf);
  153. void flushindex(indexfile *idxf);
  154. long filelen(datafile *datf);
  155. void findkey(indexfile *idxf, long *datarecnum, void *prockey);
  156. void getlockedrec(datafile *datf, long r, void *buffer);
  157. void getrec(datafile *datf, long r, void *buffer);
  158. void initindex(void);
  159. void makefile(datafile *datf, strptr fname, word reclen);
  160. void makeindex(indexfile *idxf, strptr fname, byte keylen, byte s);
  161. void nextkey(indexfile *idxf, long *datarecnum, void *prockey);
  162. void openfile(datafile *datf, strptr fname, word reclen);
  163. void openindex(indexfile *idxf, strptr fname, byte keylen, byte s);
  164. void prevkey(indexfile *idxf, long *datarecnum, void *prockey);
  165. void putrec(datafile *datf, long r, void *buffer);
  166. void searchkey(indexfile *idxf, long *datarecnum, void *prockey);
  167. long usedrecs(datafile *datf);
  168. int lock_datf(datafile *datf, long rno, byte lck);
  169. int lock_indexf(indexfile *indexf, long rno, byte lck);
  170. void resetstatus(void);
  171.  
  172. void db_tree_init(void);
  173.  
  174. /***************************** END OF DB_TREE.H *****************************/
  175.